package hhf.flex.soundapi.ui {
	import flash.display.GradientType;
	import flash.display.Graphics;
	import flash.display.GraphicsPathCommand;
	import flash.display.Shape;
	import flash.events.Event;
	import flash.geom.Matrix;
	import flash.media.SoundMixer;
	import flash.utils.ByteArray;
	
	import mx.core.UIComponent;
	
	[Style(name="fillLeftColor", type="uint", format="Color ", inherit="yes")]
	[Style(name="fillRightColor", type="uint", format="Color ", inherit="yes")]

	public class Level extends UIComponent {
		public function Level()	{
			super();
			this.setStyle("fillLeftColor", 0x6600CC);
			this.setStyle("fillRightColor", 0xCC0066);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		/**
		 * Synchronisation sur le render de la scene
		 */
		protected function onEnterFrame(e:Event):void {
			removeEventListener(Event.ENTER_FRAME, onEnterFrame);
			try {
				var bytes:ByteArray = new ByteArray();
				SoundMixer.computeSpectrum(bytes, false, 0); // 2048 buffer
				var g:Graphics = this.graphics;
/*				var matrice:Matrix = new Matrix();//Matrice de transformation du dégradé
				matrice.createGradientBox(50, 50, Math.PI/2);//largeur, épaisseur du dégradé, angle
*/				g.clear();
				var floatLeft:Number = 0; 
				var floatRight:Number = 0;
				while(bytes.bytesAvailable) {
					floatLeft = Math.min(-Math.abs(bytes.readFloat()), floatLeft); // lit 4 octets 
					floatRight = Math.min(-Math.abs(bytes.readFloat()), floatRight); // lit 4 octets
				}
				g.beginFill(getStyle("fillLeftColor"), 0.5);
//				g.beginGradientFill(GradientType.LINEAR, [0x00FF00, 0x000088], [1, 1], [0, 255], matrice); 
				g.drawRect(0, this.height, this.width/2, (floatLeft*this.height));
				g.beginFill(getStyle("fillRightColor"), 0.5);
//				g.beginGradientFill(GradientType.LINEAR, [0x00FF00, 0x000088], [1, 1], [0, 255], matrice); 
				g.drawRect(this.width/2, this.height, this.width/2, (floatRight*this.height));
/*				var rectangleDegrade:Shape = new Shape();// Instance de l'objet d'affichage
				matrice = new Matrix();// Matrice de transformation du dégradé
				matrice.createGradientBox(100, 30, Math.PI/2);// largeur et épaisseur du dégradé
				rectangleDegrade.graphics.beginGradientFill(GradientType.LINEAR, [0xCF0903, 0xFFCC00, 0x46B504], [1, 1, 0], [0, 100, 255], matrice);// Le rectangle sera rempli avec un dégradé
				rectangleDegrade.graphics.drawRect(0, 0, 100, 30);// dessin du rectangle avec la méthode drawRect(x, y, width, height)
				// Positionnement et affichage du rectangle dans la séquence
				rectangleDegrade.x = 0;
				rectangleDegrade.y = 0;
				addChild(rectangleDegrade);
*/			}catch(e:Error) {
			}
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
	}
}